#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

// int main()
// {
//     const char *msg = "hello fwrite\n";
//     fwrite(msg, strlen(msg), 1, stdout);
//     printf("hello printf\n");
//     fprintf(stdout, "hello fprintf\n");
//     return 0;
// }

// int main()
// {
//     umask(0);//掩码清楚，不然你没法给下面open的文件设置权限，不用清除，因为只在本进程有效。
//     int fd=open("myfile",O_WRONLY|O_CREAT,0666);
//     if(fd<0)
//     {
//         perror("open");
//         exit(1);//return 1;
//     }
//     int count=5;
//     const char *msg="hello,tom!~\n";
//     while(count--)
//     {
//         write(fd,msg,strlen(msg));//msg：缓冲区首地址,这里不能用sizeof（msg），因为msg是指针，他的长度（32位）是4个字节，所以要用strlen。
//         //sleep(1);//<unistd.h>
//     }
//     close(fd);
//     return 0;
// }

// int main()
// {
//     FILE *fp = fopen("myfile", "r");
//     if (!fp)
//     {
//         printf("fopen error!\n");
//     }
//     char buf[1024];
//     const char *msg = "hello tom!~\n";
//     while (1)
//     {
//         // 注意返回值和参数，此处有坑，仔细查看man手册关于该函数的说明
//         ssize_t s = fread(buf, 1, strlen(msg), fp);
//         if (s > 0)
//         {
//             buf[s] = 0;
//             printf("%s", buf);
//         }
//         if (feof(fp))
//         {
//             break;
//         }
//     }
//     fclose(fp);
//     return 0;
// }

// int main()
// {
//     int fd = open("myfile", O_RDONLY);
//     if (fd < 0)
//     {
//         perror("open");
//         return 1;
//     }
//     const char *msg = "hello tom!\n";
//     char buf[1024];
//     while (1)
//     {
//         ssize_t s = read(0, buf, sizeof(buf)); // 类比write,就是把fd的内容(myfile的内容)读到buf所指的文件中
//         if (s > 0)
//         {
//             printf("%s", buf);
//         }
//         else
//         {
//             break;
//         }
//     }
//     close(fd);
//     return 0;
// }

// int main()
// {
//     umask(0);
//     FILE *fp = fopen("mybit.txt", 'w');
//     // if (!fp)
//     // {
//     //     perror("open");
//     //     return 1;
//     // }
//     const char *msg = "linux so easy!";
//     //  fwrite(const void *buffer, size_t  size,  size_t count , FILE *stream)
//     // buffer ： 数据存储的地址
//     // size ： 要读取的字节的大小
//     // count : 要读取多少个size大小
//     // stream : 等待被读取的数据源，它是一个指向FILE结构的文件指针
//     fwrite(msg,1, strlen(msg),  fp);

//     //     size_t   fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *stream   )
//     //   buffer   是读取的数据存放的内存的指针（可以是数组，也可以是新开辟的空间，buffer就是一个索引）
//     //     size       是每次读取的字节数
//     //   count     是读取次数
//     //   stream   是要读取的文件的指针
//     fread(msg,1,strlen(msg), stdout);
//     return 0;
// }

// int main()
// {
// 	FILE* pFile;
// 	pFile = fopen("mybit.txt", "w");
//     const char *msg = "linux so easy!\n";
// 	if (pFile != NULL)
// 	{
// 		fwrite(msg,1, strlen(msg),  pFile);
// 		fclose(pFile);
// 	}
// 	return(0);
// }

int main()
{
	umask(0);//掩码清楚，不然你没法给下面open的文件设置权限，不用清除，因为只在本进程有效。
    int fd=open("mybit.txt",O_WRONLY|O_CREAT,0666);
    const char *msg = "i like linux!\n";
	if (fd>0)
	{
		write(fd,msg,strlen(msg));
		close(fd);
	}
	return(0);
}
